自从有了计算机，编程语言就开发了数千种。事实证明，所有编译器都必须解决相同的任务，并且编译器的实现最好根据这些任务进行结构化。总得来说，有三个组成部分。前端将源代码转换为中间表示(IR)；中端在IR上执行转换，其目标是提高性能或减少代码的大小；后端将IR生成为机器码。LLVM核心库为所有主流平台提供了一个由复杂转换和后端组成的中端。

此外，LLVM核心库还定义了一个中间表示，用作中间端和后端的输入。这种设计的优点是，只需要关心编程语言的前端即可。

前端的输入是源代码，通常是一个文本文件。为了使它更有意义，前端首先标识语言的单词，例如数字和标识符，通常称为标记。这一步由词法分析器执行。其次，分析了符号构成的句法结构。所谓的解析器执行这个步骤，结果是生成了抽象语法树(AST)。

最后，前端需要由语义分析器检查，代码是否遵守编程语言的规则。若没有检测到错误，则将AST转换为IR，并移交给中端处理。

下面几节中，将为表达式语言构造一个编译器，该编译器将根据其输入生成LLVM IR。LLVM llc静态编译器表示后端，将IR编译成目标代码，这一切都从定义语言开始。切记，本章中所有文件的C++实现，都将包含在src/目录中。